#include <iostream>
#include <algorithm>
using namespace std;

int p1, p2, p3, n;
string s;
string ret;

// 判断是否是数字字符
bool is_digital(char ch)
{
    return ch >= '0' && ch <= '9';
}
// 判断是否是小写字母
bool is_lowercase(char ch)
{
    return ch >= 'a' && ch <= 'z';
}
// 把[left, right]之间的字符展开
void add(char left, char right)
{
    // 用t顺序存储[left, right]之间的字符
    string t;
    // 遍历[left, right]之间的字符
    for(char ch = left + 1; ch < right; ch++)
    {
        char tmp = ch;
        // 处理p1
        if(p1 == 2 && is_lowercase(tmp)) tmp -= 32;
        else if(p1 == 3) tmp = '*';
        // 处理p2
        for(int i = 0; i < p2; i++)
        {
            t += tmp;
        }
    }
    // 处理p3
    if(p3 == 2) reverse(t.begin(), t.end());

    ret += t;
}
int main()
{
    cin >> p1 >> p2 >> p3 >> s;

    n = s.size();

    for(int i = 0; i < n; i++)
    {
        char ch = s[i];

        if(s[i] != '-' || i == 0 || i == n - 1) ret += ch;
        else
        {
            // 判断是否展开
            char left = s[i - 1], right = s[i + 1];

            if(is_digital(left) && is_digital(right) && left < right || 
            is_lowercase(left) && is_lowercase(right) && right > left)
            {
                // 展开
                add(left, right);
            }
            else
            {
                ret += ch;
            }
        }
    }

    cout << ret << endl;
    return 0;
}